home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / src / demos / GL / flight / objext.c < prev    next >
C/C++ Source or Header  |  1994-08-01  |  2KB  |  94 lines

  1. /*
  2.  * Copyright 1992, 1993, 1994, Silicon Graphics, Inc.
  3.  * All Rights Reserved.
  4.  *
  5.  * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
  6.  * the contents of this file may not be disclosed to third parties, copied or
  7.  * duplicated in any form, in whole or in part, without the prior written
  8.  * permission of Silicon Graphics, Inc.
  9.  *
  10.  * RESTRICTED RIGHTS LEGEND:
  11.  * Use, duplication or disclosure by the Government is subject to restrictions
  12.  * as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
  13.  * and Computer Software clause at DFARS 252.227-7013, and/or in similar or
  14.  * successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
  15.  * rights reserved under the Copyright Laws of the United States.
  16.  */
  17.  
  18. /*
  19.  *  flight/objext.c $Revision: 1.3 $
  20.  *
  21.  *  Extensions to gobj library routines for flight
  22.  */
  23.  
  24. #include "flight.h"
  25.  
  26.  
  27. /*
  28.  *  avg_verts() averages vertices, to get the "center" of an object.
  29.  */
  30. void avg_verts(object_t *obj, float *cx, float *cy, float *cz)
  31. {
  32.     geometry_t *g;
  33.     int i,j,k=0;
  34.     float *v;
  35.     float tx=0.0, ty=0.0, tz=0.0;
  36.  
  37.     for (i=0; i<obj->gcount; i++)
  38.     {
  39.     g = &obj->glist[i];
  40.     for (j=0; j<g->vcount; j++,k++)
  41.     {
  42.         v = g->vlist[j];
  43.         tx += v[0];
  44.         ty += v[1];
  45.         tz += v[2];
  46.     }
  47.     }
  48.     *cx = tx / (float)k;
  49.     *cy = ty / (float)k;
  50.     *cz = tz / (float)k;
  51. }
  52.  
  53.  
  54. /*
  55.  *  remap_obj() remaps the colors in a color indexed object.
  56.  *  You shouldn't call this with an object that has non color indexed
  57.  *  geometry in it.
  58.  */
  59. void remap_obj(object_t *obj)
  60. {
  61.     int i;
  62.  
  63.     for (i = 0; i < obj->gcount; i++)
  64.     remap_geom(&obj->glist[i]);
  65. }
  66.  
  67.  
  68. /*
  69.  *  remap_geom() remaps the colors in a color indexed geometry node.
  70.  *  You shouldn't call this with a geometry node that is not colorindex.
  71.  */
  72. void remap_geom(geometry_t *g)
  73. {
  74.     int i;
  75.  
  76.     switch(g->type)
  77.     {
  78.     case IMV_GEOM:
  79.     case IPV_GEOM:
  80.         for (i = 0; i < g->vcount; i++)
  81.         g->clist[i] = ci_table[g->clist[i]];
  82.         break;
  83.     case IMU_GEOM:
  84.     case IPU_GEOM:
  85.         for (i = 0; i < g->pcount; i++)
  86.         g->plist[i].color = ci_table[g->plist[i].color];
  87.         break;
  88.     default:
  89.         fprintf(stderr,
  90.             "Warning: remap_geom() told to remap non ci geometry\n");
  91.         break;
  92.     }
  93. }
  94.